React Suspense i Error Boundaries: Zaawansowana obs艂uga 艂adowania i b艂臋d贸w | MLOG | MLOG}> ); }; export default App;

W tym przyk艂adzie:

Zrozumienie Error Boundaries (Granic B艂臋d贸w)

Error Boundaries to komponenty React, kt贸re przechwytuj膮 b艂臋dy JavaScript w dowolnym miejscu drzewa komponent贸w potomnych, loguj膮 te b艂臋dy i wy艣wietlaj膮 interfejs zapasowy (fallback UI) zamiast powodowa膰 awari臋 ca艂ej aplikacji. Zapewniaj膮 one spos贸b na eleganck膮 obs艂ug臋 nieoczekiwanych b艂臋d贸w, poprawiaj膮c do艣wiadczenie u偶ytkownika i czyni膮c aplikacj臋 bardziej odporn膮.

Kluczowe koncepcje Error Boundaries

Podstawowa implementacja Error Boundaries

Oto prosty przyk艂ad tworzenia komponentu Error Boundary:


import React, { Component } from 'react';

class ErrorBoundary extends Component {
  constructor(props) {
    super(props);
    this.state = { hasError: false };
  }

  static getDerivedStateFromError(error) {
    // Zaktualizuj stan, aby nast臋pne renderowanie pokaza艂o interfejs zapasowy.
    return { hasError: true };
  }

  componentDidCatch(error, errorInfo) {
    // Mo偶esz r贸wnie偶 zalogowa膰 b艂膮d do serwisu raportowania b艂臋d贸w
    console.error(error, errorInfo);
  }

  render() {
    if (this.state.hasError) {
      // Mo偶esz wyrenderowa膰 dowolny niestandardowy interfejs zapasowy
      return 

Co艣 posz艂o nie tak.

; } return this.props.children; } } export default ErrorBoundary;

W tym przyk艂adzie:

U偶ywanie Error Boundaries

Aby u偶y膰 komponentu `ErrorBoundary`, po prostu opakuj nim komponenty, kt贸re chcesz chroni膰:


import React from 'react';
import ErrorBoundary from './ErrorBoundary';

const MyComponent = () => {
  // Symuluj b艂膮d
  throw new Error('Wyst膮pi艂 b艂膮d!');
};

const App = () => {
  return (
    
      
    
  );
};

export default App;

W tym przyk艂adzie, je艣li w `MyComponent` wyst膮pi b艂膮d, komponent `ErrorBoundary` przechwyci go i wy艣wietli interfejs zapasowy.

艁膮czenie Suspense i Error Boundaries

Suspense i Error Boundaries mo偶na 艂膮czy膰, aby zapewni膰 solidn膮 i kompleksow膮 strategi臋 obs艂ugi b艂臋d贸w dla operacji asynchronicznych. Opakowuj膮c komponenty, kt贸re mog膮 ulec zawieszeniu, zar贸wno w Suspense, jak i Error Boundaries, mo偶na elegancko obs艂u偶y膰 zar贸wno stany 艂adowania, jak i nieoczekiwane b艂臋dy.

Przyk艂ad 艂膮czenia Suspense i Error Boundaries


import React, { Suspense } from 'react';
import ErrorBoundary from './ErrorBoundary';

// Symuluje pobieranie danych (np. z API)
const fetchData = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      // Symuluj pomy艣lne pobranie danych
      // resolve({ name: 'John Doe', age: 30 });

      // Symuluj b艂膮d podczas pobierania danych
      reject(new Error('Nie uda艂o si臋 pobra膰 danych u偶ytkownika'));

    }, 2000);
  });
};

// Tworzy zas贸b, kt贸rego mo偶e u偶y膰 Suspense
const createResource = (promise) => {
  let status = 'pending';
  let result;
  let suspender = promise().then(
    (r) => {
      status = 'success';
      result = r;
    },
    (e) => {
      status = 'error';
      result = e;
    }
  );

  return {
    read() {
      if (status === 'pending') {
        throw suspender;
      } else if (status === 'error') {
        throw result;
      }

      return result;
    },
  };
};

const userData = createResource(fetchData);

// Komponent, kt贸ry odczytuje dane z zasobu
const UserProfile = () => {
  const data = userData.read();
  return (
    

Name: {data.name}

Age: {data.age}

); }; const App = () => { return ( 艁adowanie danych u偶ytkownika...}> ); }; export default App;

W tym przyk艂adzie:

Zaawansowane techniki i dobre praktyki

Optymalizacja wydajno艣ci Suspense

Niestandardowe Error Boundaries

Mo偶esz tworzy膰 niestandardowe komponenty Error Boundary do obs艂ugi okre艣lonych typ贸w b艂臋d贸w lub dostarczania bardziej informacyjnych komunikat贸w o b艂臋dach. Na przyk艂ad, mo偶na stworzy膰 Error Boundary, kt贸ry wy艣wietla inny interfejs zapasowy w zale偶no艣ci od typu b艂臋du, kt贸ry wyst膮pi艂.

Renderowanie po stronie serwera (SSR) z Suspense

Suspense mo偶e by膰 u偶ywany z renderowaniem po stronie serwera (SSR), aby poprawi膰 wydajno艣膰 pocz膮tkowego 艂adowania strony. U偶ywaj膮c SSR, mo偶na wst臋pnie wyrenderowa膰 pocz膮tkowy stan aplikacji na serwerze, a nast臋pnie przesy艂a膰 strumieniowo pozosta艂膮 tre艣膰 do klienta. Suspense pozwala na obs艂ug臋 asynchronicznego pobierania danych podczas SSR i wy艣wietlanie wska藕nik贸w 艂adowania podczas strumieniowania danych.

Obs艂uga r贸偶nych scenariuszy b艂臋d贸w

Rozwa偶 te r贸偶ne scenariusze b艂臋d贸w i sposoby ich obs艂ugi:

Globalna obs艂uga b艂臋d贸w

Zaimplementuj globalny mechanizm obs艂ugi b艂臋d贸w, aby przechwytywa膰 b艂臋dy, kt贸re nie zosta艂y z艂apane przez Error Boundaries. Mo偶na to zrobi膰, u偶ywaj膮c globalnego handlera b艂臋d贸w lub opakowuj膮c ca艂膮 aplikacj臋 w Error Boundary.

Przyk艂ady z 偶ycia wzi臋te i przypadki u偶ycia

Aplikacja e-commerce

W aplikacji e-commerce Suspense mo偶e by膰 u偶ywany do wy艣wietlania wska藕nik贸w 艂adowania podczas pobierania danych o produktach, a Error Boundaries do obs艂ugi b艂臋d贸w wyst臋puj膮cych podczas procesu p艂atno艣ci. Wyobra藕my sobie na przyk艂ad u偶ytkownika z Japonii przegl膮daj膮cego sklep internetowy zlokalizowany w Stanach Zjednoczonych. Za艂adowanie zdj臋膰 i opis贸w produkt贸w mo偶e zaj膮膰 troch臋 czasu. Suspense mo偶e wy艣wietli膰 prost膮 animacj臋 艂adowania, podczas gdy te dane s膮 pobierane z serwera znajduj膮cego si臋 by膰 mo偶e na drugim ko艅cu 艣wiata. Je艣li bramka p艂atno艣ci zawiedzie z powodu tymczasowego problemu z sieci膮 (co jest cz臋ste przy r贸偶nych infrastrukturach internetowych na 艣wiecie), Error Boundary mo偶e wy艣wietli膰 przyjazny dla u偶ytkownika komunikat zach臋caj膮cy do ponownej pr贸by p贸藕niej.

Platforma medi贸w spo艂eczno艣ciowych

Na platformie medi贸w spo艂eczno艣ciowych Suspense mo偶e by膰 u偶ywany do wy艣wietlania wska藕nik贸w 艂adowania podczas pobierania profili u偶ytkownik贸w i post贸w, a Error Boundaries do obs艂ugi b艂臋d贸w wyst臋puj膮cych podczas 艂adowania zdj臋膰 lub film贸w. U偶ytkownik przegl膮daj膮cy z Indii mo偶e do艣wiadcza膰 wolniejszego 艂adowania medi贸w hostowanych na serwerach w Europie. Suspense mo偶e pokaza膰 placeholder, dop贸ki tre艣膰 nie zostanie w pe艂ni za艂adowana. Je艣li dane profilu konkretnego u偶ytkownika s膮 uszkodzone (rzadkie, ale mo偶liwe), Error Boundary mo偶e zapobiec awarii ca艂ego feedu, wy艣wietlaj膮c zamiast tego prosty komunikat o b艂臋dzie, np. "Nie mo偶na za艂adowa膰 profilu u偶ytkownika".

Aplikacja typu dashboard

W aplikacji typu dashboard Suspense mo偶e by膰 u偶ywany do wy艣wietlania wska藕nik贸w 艂adowania podczas pobierania danych z wielu 藕r贸de艂, a Error Boundaries do obs艂ugi b艂臋d贸w wyst臋puj膮cych podczas 艂adowania wykres贸w. Analityk finansowy w Londynie, korzystaj膮cy z globalnego dashboardu inwestycyjnego, mo偶e 艂adowa膰 dane z wielu gie艂d na ca艂ym 艣wiecie. Suspense mo偶e dostarczy膰 wska藕niki 艂adowania dla ka偶dego 藕r贸d艂a danych. Je艣li API jednej z gie艂d jest niedost臋pne, Error Boundary mo偶e wy艣wietli膰 komunikat o b艂臋dzie specyficzny dla danych z tej gie艂dy, zapobiegaj膮c unieruchomieniu ca艂ego dashboardu.

Podsumowanie

React Suspense i Error Boundaries to niezb臋dne narz臋dzia do tworzenia odpornych i przyjaznych dla u偶ytkownika aplikacji React. U偶ywaj膮c Suspense do zarz膮dzania stanami 艂adowania i Error Boundaries do obs艂ugi nieoczekiwanych b艂臋d贸w, mo偶na poprawi膰 og贸lne do艣wiadczenie u偶ytkownika i upro艣ci膰 proces tworzenia oprogramowania. Ten przewodnik dostarczy艂 kompleksowego przegl膮du Suspense i Error Boundaries, obejmuj膮c wszystko od podstawowych koncepcji po zaawansowane techniki. Stosuj膮c si臋 do najlepszych praktyk przedstawionych w tym artykule, mo偶na tworzy膰 solidne i niezawodne aplikacje React, kt贸re poradz膮 sobie nawet w najtrudniejszych scenariuszach.

W miar臋 jak React si臋 rozwija, Suspense i Error Boundaries prawdopodobnie b臋d膮 odgrywa膰 coraz wa偶niejsz膮 rol臋 w budowaniu nowoczesnych aplikacji internetowych. Opanowuj膮c te funkcje, mo偶na wyprzedzi膰 konkurencj臋 i dostarcza膰 wyj膮tkowe do艣wiadczenia u偶ytkownika.